package uy.edu.ort.persistencia;

import java.util.List;
import org.hibernate.HibernateException;
import uy.edu.ort.dominio.Cliente;
import uy.edu.ort.dominio.Pagina;
import uy.edu.ort.dominio.Programa;
import uy.edu.ort.excepcionesdb.DBAgregarException;
import uy.edu.ort.excepcionesdb.DBConsultarException;
import uy.edu.ort.interfaces.IPersistencia;
import uy.edu.ort.persistencia.dao.ClienteDAO;
import uy.edu.ort.persistencia.dao.PaginaDAO;
import uy.edu.ort.persistencia.dao.ProgramaDAO;

/**
 *
 * @author 153287 - 154559
 */
public class PersistenciaImpl implements IPersistencia{

    @Override
    public long guardaCliente(Cliente cliente) throws DBAgregarException {
        ClienteDAO cDao = new ClienteDAO();
        Long retorno;
        try {
            retorno = cDao.guardaCliente(cliente);
        } catch (HibernateException ex) {
            throw new DBAgregarException(ex.getCause(), ex.getMessage());
        }
        return retorno;
    }

    @Override
    public List<Cliente> obtenerListaClientes() throws DBConsultarException {
        ClienteDAO cDao = new ClienteDAO();
        List<Cliente> listaClientes;
        try {
            listaClientes = cDao.obtenerListaClientes();
        } catch (HibernateException ex) {
            throw new DBConsultarException(ex.getCause(), ex.getMessage());
        }
        return listaClientes;
    }

    @Override
    public List<Cliente> obtenerClienteByIdentificador(String identificador) throws DBConsultarException {
        ClienteDAO cDao = new ClienteDAO();
        List<Cliente> listaClientes;
        try {
            listaClientes = cDao.obtenerClienteByIdentificador(identificador);
        } catch (HibernateException ex) {
            throw new DBConsultarException(ex.getCause(), ex.getMessage());
        }
        return listaClientes;
    }

    @Override
    public long guardaPagina(Pagina pagina) throws DBAgregarException {
       PaginaDAO pDao = new PaginaDAO();
       Long retorno;
       try {
           retorno = pDao.guardaPagina(pagina);
       } catch (HibernateException ex) {
           throw new DBAgregarException(ex.getCause(), ex.getMessage());
       }
       return retorno;
    }

    @Override
    public long guardaPrograma(Programa programa) throws DBAgregarException {
        ProgramaDAO pDao = new ProgramaDAO();
        Long retorno;
        try {
            retorno = pDao.guardaPrograma(programa);
        } catch (HibernateException ex) {
            throw new DBAgregarException(ex.getCause(), ex.getMessage());
        }
        return retorno;
    }

    @Override
    public List<Programa> obtenerListaProgramas() throws DBConsultarException {
        ProgramaDAO pDao = new ProgramaDAO();
        List<Programa> listaProgramas;
        try {
            listaProgramas = pDao.obtenerListaProgramas();
        } catch (HibernateException ex) {
            throw new DBConsultarException(ex.getCause(), ex.getMessage());
        }
        return listaProgramas;
    }

    @Override
    public List<Programa> obtenerProgramaByNombre(String nombre) throws DBConsultarException {
        ProgramaDAO pDao = new ProgramaDAO();
        List<Programa> listaProgramas;
        try {
            listaProgramas = pDao.obtenerProgramaByNombre(nombre);
        } catch (HibernateException ex) {
            throw new DBConsultarException(ex.getCause(), ex.getMessage());
        }
        return listaProgramas;
    }

    @Override
    public List<Programa> obtenerListaProgramasPorCliente(String idCliente) throws DBConsultarException {
        ProgramaDAO pDao = new ProgramaDAO();
        List<Programa> listaProgramas;
        try {
            listaProgramas = pDao.obtenerListaProgramasPorCliente(idCliente);
        } catch (HibernateException ex) {
            throw new DBConsultarException(ex.getCause(), ex.getMessage());
        }
        return listaProgramas;
    }

    @Override
    public List<Programa> obtenerListaProgramasPorTamaño() throws DBConsultarException {
        ProgramaDAO pDao = new ProgramaDAO();
        List<Programa> listaProgramas;
        try {
            listaProgramas = pDao.obtenerListaProgramasPorTamaño();
        } catch (HibernateException ex) {
            throw new DBConsultarException(ex.getCause(), ex.getMessage());
        }
        return listaProgramas;
    }

    @Override
    public List<Programa> obtenerListaProgramasPorPaginas() throws DBConsultarException {
        ProgramaDAO pDao = new ProgramaDAO();
        List<Programa> listaProgramas;
        try {
            listaProgramas = pDao.obtenerListaProgramasPorPaginas();
        } catch (HibernateException ex) {
            throw new DBConsultarException(ex.getCause(), ex.getMessage());
        }
        return listaProgramas;
    }    
}
